]> dgit.raspbian.org Git - gnome-shell.git/commitdiff
st-texture-cache: Add API to remove cache data
authorFlorian Müllner <fmuellner@gnome.org>
Fri, 21 Sep 2012 14:00:44 +0000 (16:00 +0200)
committerFlorian Müllner <fmuellner@gnome.org>
Mon, 24 Sep 2012 20:03:04 +0000 (22:03 +0200)
The current API assumes that image data loaded from files remains
valid during the life time of the shell. This assumption is mostly
valid for image files we provide ourselves (with the exception being
designers working on those files), but not necessarily for "external"
files - provide API to explicitly remove cached data associated with
a URI for those cases.

https://bugzilla.gnome.org/show_bug.cgi?id=679268

src/st/st-texture-cache.c
src/st/st-texture-cache.h

index f76543e65f62f48106ec879f6becbcb48be77817..211143254a70204bae4e20520c471e82cb57d5d5 100644 (file)
@@ -94,6 +94,33 @@ st_texture_cache_class_init (StTextureCacheClass *klass)
                   G_TYPE_NONE, 0);
 }
 
+/**
+ * st_texture_cache_clear_uri:
+ * @cache: A #StTextureCache
+ * @uri: URI of cached object
+ *
+ * If the given @uri is known to have been modified
+ * externally, this function may be used to invalidate
+ * the in-memory cache.
+ */
+void
+st_texture_cache_clear_uri (StTextureCache *cache,
+                            const char     *uri)
+{
+  char *key;
+
+  g_return_if_fail (ST_IS_TEXTURE_CACHE (cache));
+  g_return_if_fail (uri != NULL);
+
+  key = g_strconcat (CACHE_PREFIX_URI, uri, NULL);
+  g_hash_table_remove (cache->priv->keyed_cache, key);
+  g_free (key);
+
+  key = g_strconcat (CACHE_PREFIX_URI_FOR_CAIRO, uri, NULL);
+  g_hash_table_remove (cache->priv->keyed_cache, key);
+  g_free (key);
+}
+
 /* Evicts all cached textures for named icons */
 static void
 st_texture_cache_evict_icons (StTextureCache *cache)
index fc7dac294d2ad2095e07693c3139138e0d2bd834..b5c563b8463a7861d81309a3f6233e92553c4833 100644 (file)
@@ -68,6 +68,9 @@ GType st_texture_cache_get_type (void) G_GNUC_CONST;
 
 StTextureCache* st_texture_cache_get_default (void);
 
+void st_texture_cache_clear_uri (StTextureCache *cache,
+                                 const gchar    *uri);
+
 ClutterActor *
 st_texture_cache_load_sliced_image (StTextureCache    *cache,
                                     const gchar       *path,